import {defineConfig, loadEnv} from "vite";
import uni from '@uni-helper/plugin-uni'
import path from 'node:path'
import AutoImport from 'unplugin-auto-import/vite'
// 使得项目支持  layout布局
import UniLayouts from '@uni-helper/vite-plugin-uni-layouts'
// 在页面中编写路由
import UniPages from '@uni-helper/vite-plugin-uni-pages'
// 配置文件热重载
import ViteRestart from 'vite-plugin-restart'
import UnoCSS from 'unocss/vite'

const timestamp = new Date().getTime()

// https://vitejs.dev/config/
export default ({command, mode}) => {
    const env = loadEnv(mode, path.resolve(process.cwd()))
    const {VITE_ENV, VITE_APP_API_BASEURL, VITE_APP_PROXY, VITE_APP_PROXY_PREFIX} = env

    return defineConfig({
        plugins: [
            UniLayouts(),
            UniPages(),
            ViteRestart({
                restart: [
                    'vite.config.js', // 监视配置文件变化
                    '.env*' // 监视环境文件变化
                ]
            }),
            uni(),
            UnoCSS(),
            AutoImport({
                dts: false,
                imports: [
                    'vue',
                    'uni-app',
                    'pinia',
                    {
                        '@/api': ['useRequest'],
                    },
                ],
                eslintrc: {enabled: true},
            }),
        ],
        // 别名配置
        resolve: {
            alias: {
                '@': path.join(process.cwd(), './src'),
                '@img': path.join(process.cwd(), './src/static/images'),
            },
        },
        // 仅 H5 端生效，其他端不生效（其他端走build，不走devServer)
        server: {
            host: '0.0.0.0',
            hmr: true, //为开发服务启用热更新，默认是不启用热更新的
            strictPort: false, // 设为 true 时若端口已被占用则会直接退出，而不是尝试下一个可用端口
            port: 3000,
            open: false, // 启动后是否浏览器自动打开
            proxy: JSON.parse(VITE_APP_PROXY) ? { //// 本地开发环境通过代理实现跨域，生产环境使用 nginx 转发
                [VITE_APP_PROXY_PREFIX]: {
                    target: VITE_APP_API_BASEURL,
                    changeOrigin: true,
                    rewrite: (path) => path.replace(new RegExp(`^${VITE_APP_PROXY_PREFIX}`), ''),
                },
            } : undefined,
        },
        // 对打包结果处理
        build: {
            assetsDir: "assets", //指定静态资源存放路径
            sourcemap: ['development','test'].includes(VITE_ENV) ? false : true, //是否构建source map 文件
            minify: "terser", // 混淆器，terser 构建后文件体积更小，'terser' | 'esbuild'
            chunkSizeWarningLimit: 500, //chunk 大小警告的限制，默认500KB
            rollupOptions: {
                /** 静态文件按类型分包 */
                output: {
                    chunkFileNames: `static/js/[name].[hash]${timestamp}.js`,
                    entryFileNames: `static/js/[name].[hash]${timestamp}.js`,
                    assetFileNames: `static/[ext]/[name].[hash]${timestamp}.[ext]`,
                },
            },
            terserOptions: {
                // 生产环境移除console debugger
                compress: {
                    drop_console: ['development','test'].includes(VITE_ENV) ? false : true,
                    drop_debugger: ['development','test'].includes(VITE_ENV) ? false : true,
                },
            },
        },
    })

}